/**
 * SyncSaver.java ##copyright## This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation; either version 2.1 of the License, or (at your option) any later version. This
 * library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 * General Public License for more details. You should have received a copy of the GNU Lesser
 * General Public License along with this library; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 * 
 * @author ##author##
 * @modified ##date##
 * @version ##version##
 */

package fiveagon.saver;

/**
 * <code>Saver</code> that ensures <code>save</code> and <code>saveRecord</code> will record the
 * same frame in an animated sketch.
 */
public class SyncSaver implements Saver {
  private final AbstractSaver realSaver;
  private boolean doSave = false;

  /**
   * Sole constructor.
   * 
   * @param realSaver the Saver that you want to synchronize
   */
  public SyncSaver(AbstractSaver realSaver) {
    this.realSaver = realSaver;
  }

  public void save() {
    doSave = true;
  }

  public void saveRecord() {
    realSaver.saveRecord();
  }

  public void beginRecord() {
    realSaver.beginRecord();
  }

  public void endRecord() {
    if (doSave) {
      realSaver.save();
      doSave = false;
    }
    realSaver.endRecord();
  }

  /**
   * Gets the prefix that this <code>Saver</code> will use when creating file names.
   * 
   * @return the prefix (including the folder name) of the files that will be created by this
   *         <code>Saver</code>
   */
  @Override
  public String toString() {
    return realSaver.toString();
  }
}
